//快乐数-------202
// 编写一个算法来判断一个数 n 是不是快乐数。
// 「快乐数」 定义为：
// 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
// 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
// 如果这个过程 结果为 1，那么这个数就是快乐数。
// 如果 n 是 快乐数 就返回 true ；不是，则返回 false 。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int MyNumberLen(int n)
{
    int count = 0;
    while(n > 0)
    {
        count++;
        n = n/10;
    }
    return count;
}

int *HapperArray(int n)
{
    int *s;
    int x = 0;
    x = MyNumberLen(n);
    s=malloc(sizeof(int)*MyNumberLen(n));
    for(int i = 0; i < x; i++)
    {
        s[i] = n % 10;
        n = n / 10;
    }
    return s;
}

bool isHappy(int n) 
{
    int sum = 0;
    int *s = HapperArray(n);
    for(int i = 0; i < MyNumberLen(n); i++)
    {
        sum += s[i]*s[i];
    }
    if(sum == 1)
    return true;
    if(sum < 7)
    return false;
    else return (isHappy(sum));
}

int main()
{
    int n;
    printf("请输入一个正整数:");
    scanf("%d",&n);
    if(isHappy(n) == 1)
    {
        printf("%d是快乐数\n",n);
    }
    else
    printf("%d不是快乐数\n",n);
    return 0;
}